#include <stdio.h>
#ifdef WIN32
#include <curses.h>
#else
#include <ncurses.h>
#endif

#include "assert.h"
#include "jeu.h"
#include "ennemi.h"


void ncursAff( WINDOW* win, const jeu *pJeu)
{
	int x, y;
	const terrain *pTer = jeuGetConstTerrainPtr(pJeu);
	const mario *pMario = jeuGetConstMarioPtr(pJeu);

	wclear(win);

	for(x=0; x<getTailleX(pTer); ++x)
		for(y=0; y<getTailleY(pTer); ++y)
			mvwprintw(win, y, x, "%c", terrainGetXY(pTer, x, y) );

	mvwprintw(win, marioGetY(pMario), marioGetX(pMario), "M");
	mvwprintw(win, getTailleY(jeuGetConstTerrainPtr(pJeu))+1, 2, "CHOMPBOMBS");
	wmove(win, marioGetY(pMario), marioGetX(pMario));
}

void ncursBoucle(jeu *pJeu)
{
	WINDOW *win;
	int c,i;
	int continue_boucle;
	char direction = 'h';
	int nbEnnemis = -1;
	int degatMario = 0;

	initscr();		/* passe l'écran texte en mode NCurses */
	clear();		/* efface l'écran */
	noecho();   	/* Lorsqu'une touche est préssée au clavier, elle n'apparait pas à l'écran */
	cbreak();		/* un caractère est directement affiché, il ne passe pas dans un buffer */

	/* Creation d'une nouvelle fenetre en mode texte */
	/* => fenetre de dimension et position ( WIDTH, HEIGHT, STARTX,STARTY) */
	win = newwin(20, 20, 3, 28 );
	keypad(win, TRUE);		/* pour que les flèches soient traitées (il faut le faire après création de la fenêtre) */

	halfdelay( 1 );
	/* notimeout(win,true); */
	/* wtimeout( win, 500 ); */
	nodelay(win,true);



	continue_boucle = 1;

	do
	{
		ncursAff(win, pJeu);

		continue_boucle = gestionExplosion(pJeu, &pJeu->mario, &pJeu->luigi, 1);
		deplaceEnnemis(pJeu, 1);


		nbEnnemis = compteEnnemis(pJeu);
        if (nbEnnemis == 0)
        {
            continue_boucle = 0;
        }
        else marioInvincible(pJeu, &pJeu->mario, 10);


        /* on verifie si Mario s'est fait attaquer par un ennemi */
        for (i = 0; i < 4; i++)
        {
            if (pJeu->ter.ennemiTab[i] != 0)
            {
                degatMario = gestionDegats(pJeu, &pJeu->mario, i, direction);

                switch (degatMario)
                {
                    case 0 : continue_boucle = 0; break;
                    case 1 : continue_boucle = 1; break;
                    case 2 : continue_boucle = 1; break;
                }
            }

        }

		c = wgetch(win);
		switch(c)
		{
			case KEY_LEFT:
				jeuActionClavier( pJeu, 'g', 1);
				direction = 'g';
				break;
			case KEY_RIGHT:
				jeuActionClavier( pJeu, 'd', 1);
				direction = 'd';
				break;
			case KEY_UP:
				jeuActionClavier( pJeu, 'h', 1);
				direction = 'h';
				break;
			case KEY_DOWN:
				jeuActionClavier( pJeu, 'b', 1);
				direction = 'b';
				break;
			case ' ':
			  	jeuActionClavier( pJeu, 'a', 1);
				break;
			case 27: /* ECHAP */
				continue_boucle = 0;
				break;
		}
	} while (continue_boucle == 1);

	endwin();
}
